package br.pb.sistcomp.controller;

import br.pb.sistcomp.entity.Leilao;
import br.pb.sistcomp.dao.LeilaoDaoImpl;
import br.pb.sistcomp.dao.ProdutoDaoImpl;
import br.pb.sistcomp.entity.Produto;
import br.pb.sistcomp.exception.ErroAoRemoverException;
import br.pb.sistcomp.exception.ErroAoSalvarException;
import br.pb.sistcomp.util.MessagesUtil;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

//import javax.faces.model.DataModel;
//import javax.faces.model.ListDataModel;
/**
 * Class that manager the navigation
 *
 * @author Renan Oliveira
 * @version 1.02
 *
 */
/**
 *
 * Annotations of JSF for navigation the scoped of application
 *
 */
@ManagedBean
@RequestScoped
public class LeilaoController {

    private Leilao leilao;
    private List<Leilao> leiloes;
    private LeilaoDaoImpl leilaoDao;
    private ProdutoDaoImpl produtos;
    private DataModel modelLeilao;

    /**
     * Construct that creates a new instance of LeilaoController
     */
    public LeilaoController() {

        leilaoDao = new LeilaoDaoImpl();
        produtos = new ProdutoDaoImpl();
        leilao = new Leilao();



    }

    /**
     * Method for load the DataModel
     *
     * @return one list de Leiloes
     */
    public DataModel carregarLeilao() {
        modelLeilao = new ListDataModel(leilaoDao.listarTodos());
        return modelLeilao;


    }

    /**
     * Method for return one object Leilao
     *
     *
     * @return object Leilao
     *
     *
     */
    public Leilao getLeilao() {
        return leilao;
    }

    /**
     *
     * Method for set object Leilao
     *
     * @param object Leilao
     *
     */
    public void setLeilao(Leilao leilao) {
        this.leilao = leilao;
    }

    /**
     *
     * Method for add one object Leilao calling the class LeilaoDaoImpl
     *
     * @return one String gotoListarTodosLeiloes that calling the pages to list Leiloes
     *
     *
     */
    public String inserir() {


        try {

            leilao.setData_criacao(new Date());
            leilao.setHora_criacao(new Date());

            leilaoDao.addLeilao(leilao);

            MessagesUtil.addInfoMsg("Leilão cadastrado com sucesso!");

            leilao = new Leilao();


        } catch (ErroAoSalvarException ex) {

            MessagesUtil.addErroMsg("Erro ao cadastrar Leilao. Por favor, tente outra vez ou contate o administrador do sistema");


        } finally {

            //clean the cache

            leilao = new Leilao();

        }

        return "gotoListarLeiloesRestrito";

    }

    /**
     * Method for remove one object Leilao calling LeilaoDaoImpl
     *
     * @return one String gotoListarTodosLeiloes that calling the pages to list Leiloes
     *
     */
    public String remover() {

        try {


            leilao = (Leilao) modelLeilao.getRowData();

            modelLeilao = carregarLeilao();

            leilaoDao.removeLeilao(leilao);

            MessagesUtil.addInfoMsg("Leilão Excluído com Sucesso!");


        } catch (ErroAoRemoverException ex) {

            MessagesUtil.addErroMsg("Erro ao excluir Leilão!");


        }


        return "gotoListarLeiloesRestrito";


    }

    /**
     *
     * Method for list all leiloes calling the class LeilaoDaoImpl
     *
     * @return one list of objects leiloes
     *
     *
     */
    public String listarTodosLeiloes() {

        modelLeilao = carregarLeilao();

        return "gotoListarLeiloesRestrito";

    }

    /**
     *
     * Method for list all leiloes active calling the class LeilaoDaoImpl
     *
     * @return one list of objects leiloes active
     *
     */
    public List<Leilao> listarTodosLeiloesAtivos() {


        return leilaoDao.listarTodosAtivos();


    }

    /**
     *
     * Method for list all leiloes inactive calling the class LeilaoDaoImpl
     *
     * @return one list of leiloes inactive
     *
     */
    public List<Leilao> listarTodosLeiloesInativos() {


        return leilaoDao.listarTodosInativos();

    }

    /**
     *
     * Method for list all Produto
     *
     * @return one list of Produto
     *
     */
    public List<Produto> listarProdutos() {

        return produtos.listarTodos();


    }

    /**
     * @return DataModel the DataModel to set
     */
    public DataModel getLista() {
        return modelLeilao;
    }

    /**
     * @param DataModel the DataModel to set
     */
    public void setLista(DataModel lista) {
        this.modelLeilao = lista;
    }
}
